//////////////////////////////////////////////////////////////////////////////////////
//
//  Copyright (c) 2014-2015, Egret Technology Inc.
//  All rights reserved.
//  Redistribution and use in source and binary forms, with or without
//  modification, are permitted provided that the following conditions are met:
//
//     * Redistributions of source code must retain the above copyright
//       notice, this list of conditions and the following disclaimer.
//     * Redistributions in binary form must reproduce the above copyright
//       notice, this list of conditions and the following disclaimer in the
//       documentation and/or other materials provided with the distribution.
//     * Neither the name of the Egret nor the
//       names of its contributors may be used to endorse or promote products
//       derived from this software without specific prior written permission.
//
//  THIS SOFTWARE IS PROVIDED BY EGRET AND CONTRIBUTORS "AS IS" AND ANY EXPRESS
//  OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
//  OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
//  IN NO EVENT SHALL EGRET AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
//  INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
//  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;LOSS OF USE, DATA,
//  OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
//  LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
//  NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
//  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
//
//////////////////////////////////////////////////////////////////////////////////////

class Main extends eui.UILayer {

    private nickname: string = "nickname";
    private vnick: string;
    private kheadico: string = "headicon";
    private vheadico: string;
    private kopenid: string = "openid";
    private vopenid: string;
    public url:string = "";
    
    private static _instance: Main;

    public static getInstance(): Main {
        if(Main._instance == null) {
            Main._instance = new Main();
        }
        return Main._instance;
    }
    public constructor() {
        super();
        Main._instance = this;
    }
    /**
     * 加载进度界面
     * loading process interface
     */
    private loadingView: LoadingUI;
    protected createChildren(): void {
        super.createChildren();
           var url: string = window.location.href;
        if(url.indexOf("nickname") > 0) {
            //这里判断有没有缓存
            if(egret.localStorage.getItem(this.nickname) == null || egret.localStorage.getItem(this.kheadico) == null || egret.localStorage.getItem(this.kopenid) == null) {
                this.vnick = this.GetQueryString("nickname");
                this.vopenid = this.GetQueryString("openid");
                this.setL();
                var assetAdapter = new AssetAdapter();
                this.stage.registerImplementation("eui.IAssetAdapter",assetAdapter);
                this.stage.registerImplementation("eui.IThemeAdapter",new ThemeAdapter());

                // initialize the Resource loading library
                //初始化Resource资源加载库
                RES.addEventListener(RES.ResourceEvent.CONFIG_COMPLETE,this.onConfigComplete,this);
                RES.loadConfig("resource/default.res.json","resource/");
//                window.location.href = "http://api.weixinzjit.com";
            } else {
                this.removeDropItem();
                this.vnick = this.GetQueryString("nickname");
                this.vopenid = this.GetQueryString("openid");
                this.setL();
//                window.location.href = "http://api.weixinzjit.com";
//                //注入自定义的素材解析器
                var assetAdapter = new AssetAdapter();
                this.stage.registerImplementation("eui.IAssetAdapter",assetAdapter);
                this.stage.registerImplementation("eui.IThemeAdapter",new ThemeAdapter());

                // initialize the Resource loading library
                //初始化Resource资源加载库
                RES.addEventListener(RES.ResourceEvent.CONFIG_COMPLETE,this.onConfigComplete,this);
                RES.loadConfig("resource/default.res.json","resource/");
            }
        } else{
                var url1 = encodeURIComponent("http://ztetj7.weixinzjit.com");
                window.location.href = "http://ztetj7.weixinzjit.com/ZTE/Api/oauthinf?callback=" + url1;
        }
        
//        var assetAdapter = new AssetAdapter();
//        this.stage.registerImplementation("eui.IAssetAdapter",assetAdapter);
//        this.stage.registerImplementation("eui.IThemeAdapter",new ThemeAdapter());
//
//        // initialize the Resource loading library
//        //初始化Resource资源加载库
//        RES.addEventListener(RES.ResourceEvent.CONFIG_COMPLETE,this.onConfigComplete,this);
//        RES.loadConfig("resource/default.res.json","resource/");
    }
    

    private setL() {
        egret.localStorage.setItem(this.nickname,this.vnick);
        egret.localStorage.setItem(this.kheadico,this.vheadico);
        egret.localStorage.setItem(this.kopenid,this.vopenid);
    }

    public removeDropItem(): void {
        egret.localStorage.removeItem(this.nickname);
        egret.localStorage.removeItem(this.kheadico);
        egret.localStorage.removeItem(this.kopenid);
    }
    
    private addLoadingScence(): void {
        //Config loading process interface
        //设置加载进度界面
        this.loadingView = new LoadingUI();
        //        document.getElementById("preloading").style.display = "none";
        this.stage.addChild(this.loadingView);
    }

    public  GetQueryString(name): string {
        var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
        var r = window.location.search.substr(1).match(reg);
        if(r != null) {
            return r[2];
        } else {
            return "";
        }


    }
    
    public loadPreload(): void {
        RES.addEventListener(RES.ResourceEvent.GROUP_COMPLETE,this.onResourceLoadComplete,this);
        RES.addEventListener(RES.ResourceEvent.GROUP_LOAD_ERROR,this.onResourceLoadError,this);
        RES.addEventListener(RES.ResourceEvent.GROUP_PROGRESS,this.onResourceProgress,this);
        RES.loadGroup("preload");
    }
    /**
     * 配置文件加载完成,开始预加载皮肤主题资源和preload资源组。
     * Loading of configuration file is complete, start to pre-load the theme configuration file and the preload resource group
     */
    private onConfigComplete(event: RES.ResourceEvent): void {
        RES.removeEventListener(RES.ResourceEvent.CONFIG_COMPLETE,this.onConfigComplete,this);
        // load skin theme configuration file, you can manually modify the file. And replace the default skin.
        //加载皮肤主题配置文件,可以手动修改这个文件。替换默认皮肤。
        var theme = new eui.Theme("resource/default.thm.json",this.stage);
        theme.addEventListener(eui.UIEvent.COMPLETE,this.onThemeLoadComplete,this);
    }
    private isThemeLoadEnd: boolean = false;
    /**
     * 主题文件加载完成,开始预加载
     * Loading of theme configuration file is complete, start to pre-load the 
     */
    private onThemeLoadComplete(): void {
        this.isThemeLoadEnd = true;
        //        this.createScene();
        this.addLoadingScence();
    }
    private isResourceLoadEnd: boolean = false;
    /**
     * preload资源组加载完成
     * preload resource group is loaded
     */
    private onResourceLoadComplete(event: RES.ResourceEvent): void {
        if(event.groupName == "preload") {
//            egret.setTimeout(function(){
                this.stage.removeChild(this.loadingView);
                this.isResourceLoadEnd = true;
                this.createScene();
//                },this,2000);
        }
    }
    private createScene() {
        if(this.isThemeLoadEnd && this.isResourceLoadEnd) {
            this.startCreateScene();
        }
    }
    /**
     * 资源组加载出错
     *  The resource group loading failed
     */
    private onItemLoadError(event: RES.ResourceEvent): void {
        console.warn("Url:" + event.resItem.url + " has failed to load");
    }
    /**
     * 资源组加载出错
     * Resource group loading failed
     */
    private onResourceLoadError(event: RES.ResourceEvent): void {
        //TODO
        console.warn("Group:" + event.groupName + " has failed to load");
        //忽略加载失败的项目
        //ignore loading failed projects
        this.onResourceLoadComplete(event);
    }
    /**
      * preload资源组加载进度
      * loading process of preload resource
      */
    private onResourceProgress(event: RES.ResourceEvent): void {
        if(event.groupName == "preload") {
//            this.loadingView.setProgress(event.itemsLoaded,event.itemsTotal);
        }
    }
    /**
     * 创建场景界面
     * Create scene interface
     */
    protected startCreateScene(): void {
        var shouye:ShouYeView = new ShouYeView();
        Main.getInstance().addChild(shouye);
    }

    private onGetIOError4(event: egret.IOErrorEvent): void {

    }
    private onGetProgress4(event: egret.ProgressEvent): void {

    }
}
